//package com.example.security.filter;
//
//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
//import org.springframework.context.ApplicationEventPublisher;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.security.authentication.AuthenticationEventPublisher;
//import org.springframework.security.authentication.DefaultAuthenticationEventPublisher;
//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
//import org.springframework.security.core.userdetails.User;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
//import org.springframework.security.crypto.password.PasswordEncoder;
//import org.springframework.security.provisioning.InMemoryUserDetailsManager;
//
///**
// * @className: DefaultSecurityConfig$
// * @author: YTF
// * @date: 2025/4/29$ 21:34$
// * @description: Spring Security 默认安全配置类
// * 1. 配置内存用户（仅当没有其他 UserDetailsService 时生效）
// * 2. 定义密码编码器
// * 3. 配置默认认证事件发布器
// */
//@EnableWebSecurity // 启用 Spring Security 的 Web 安全支持
//@Configuration     // 标记为 Spring 配置类
//public class DefaultSecurityConfig {
//
//    /**
//     * 内存用户管理器（条件化 Bean）
//     * 作用：当容器中没有其他 UserDetailsService 实现时，注册一个内存用户
//     * 用户信息：用户名 user，密码经过 BCrypt 加密，角色 USER
//     *
//     * @ConditionalOnMissingBean(UserDetailsService.class) 表示仅当不存在其他 UserDetailsService Bean 时生效（避免冲突）
//     */
//    @Bean
//    @ConditionalOnMissingBean(UserDetailsService.class)
//    InMemoryUserDetailsManager inMemoryUserDetailsManager() {
//        // 使用 BCrypt 加密密码 "user"（实际生产应从外部配置读取）
//        String generatedPassword = passwordEncoder().encode("user");
//        System.out.println("生成加密后的测试用户密码: " + generatedPassword);
//
//        return new InMemoryUserDetailsManager(
//                User.withUsername("user")
//                        .password(generatedPassword)
//                        .roles("USER")
//                        .build()
//        );
//    }
//
//    /**
//     * 密码编码器 Bean
//     * 作用：定义密码加密和解密策略（此处使用 BCrypt 强哈希算法）
//     * 生产环境推荐：BCrypt 是当前最安全的密码存储方案之一
//     */
//    @Bean
//    public PasswordEncoder passwordEncoder() {
//        return new BCryptPasswordEncoder();
//    }
//
//    /**
//     * 默认认证事件发布器（条件化 Bean）
//     * 作用：将 Spring Security 的认证事件（如登录成功/失败）发布为 Spring 应用事件
//     * 例如：可监听 AuthenticationSuccessEvent 记录登录日志
//     *
//     * @param delegate Spring 应用事件发布器（自动注入）
//     * @ConditionalOnMissingBean(AuthenticationEventPublisher.class) 表示仅当不存在自定义认证事件发布器时生效
//     */
//    @Bean
//    @ConditionalOnMissingBean(AuthenticationEventPublisher.class)
//    DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(
//            ApplicationEventPublisher delegate // Spring 事件发布器（由容器自动注入）
//    ) {
//        // 桥接 Spring Security 事件到 Spring 事件体系
//        return new DefaultAuthenticationEventPublisher(delegate);
//    }
//
//}